package com.ruanxie.mapper;

import com.github.pagehelper.Page;
import com.ruanxie.entity.*;
import com.ruanxie.entity.Course;
import com.ruanxie.entity.Student;
import com.ruanxie.entity.TeachingPlanCourseInfo;
import com.ruanxie.entity.TeachingPlanInfo;
import com.ruanxie.vo.student.StudentCourseGradeVO;
import com.ruanxie.vo.student.StudentGetCourseScheduleOfStudentVO;
import com.ruanxie.vo.student.TeachingPlanCourseInfoVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface StudentMapper {


    /**
     * 插入课程信息
     * @param course
     */
    void saveCourse(Course course);

    /**
     * 插入学生信息
     * @param student
     */
    void saveStudent(Student student);

    /**
     * 插入教学执行计划课程信息
     * @param teachingPlanCourseInfo
     */
    void saveTeachingPlanCourseInfo(TeachingPlanCourseInfo teachingPlanCourseInfo);

    /**
     * 插入教学执行计划信息
     * @param teachingPlanInfo
     */
    void saveTeachingPlanInfo(TeachingPlanInfo teachingPlanInfo);


    /**
     * 检查当前教学执行计划是否存在
     * @param majorName
     * @param yearOfEntry
     * @return
     */
    TeachingPlanInfo getTeachingPlanInfoByMajorNameAndYearOfentry(String majorName, String yearOfEntry);

    /**
     * 导入学生课程信息测试
     * @param studentId
     * @param courseSchedule
     */
    void saveCourseScheduleOfStudent(String studentId, String courseSchedule);
            //这里有点想改为了Object类型

//    /**
//     * json数据存取测试
//     * @param jsonString
//     */
//    void saveJson(String jsonString);

    /**
     * 查询学生的个人课表
     * @param studentId
     * @return
     */
    CourseScheduleOfStudent getCourseScheduleOfStudent(String studentId);


    /**
     * 插入课程的记录列表
     * @param courseList
     */
    void saveCourseList(List<Course> courseList);

    /**
     * 插入教学执行计划课程信息列表
     * @param teachingPlanCourseInfoList
     */
    void saveTeachingPlanCourseInfoList(List<TeachingPlanCourseInfo> teachingPlanCourseInfoList);

    /**
     * 保存教学班列表
     * (这个几乎不会变动的，发生主键冲突直接跳过)
     * @param teachingClassList
     */
    void saveTeachingClassList(List<TeachingClass> teachingClassList);

    /**
     * 保存学生修读信息列表
     * (当前设计成发生主键冲突时，直接跳过)
     * @param enrollmentList
     */
    void saveEnrollmentList(List<Enrollment> enrollmentList);

    List<Course> queryCourse();

    /**
     * 通过学号查询当前教学执行计划
     * @param studentId
     * @return
     */
    TeachingPlanInfo getTeachingPlanInfoByStudentId(String studentId);

    /**
     * 通过教学执行计划ID查询课程信息以及教学执行计划课程信息
     * @param teachingPlanInfoId
     * @return
     */
    List<TeachingPlanCourseInfoVO> getTeachingPlanCourseInfoVOByTeachingPlanInfoId(String teachingPlanInfoId);

    /**
     * 根据条件查询学生成绩(设置分页的了)
     * @param studentId
     * @param schoolYear
     * @param term
     * @param courseNature
     * @return
     */
    Page<StudentCourseGradeVO> getCourseGradeOfStudent(String studentId, String schoolYear, String term, String courseNature);
}
